home *** CD-ROM | disk | FTP | other *** search
- *********************************************************
- * load_text.s *
- * テキストファイルの読み込み *
- * コール *
- * pea.l filename * ファイル名 *
- * bsr load_text *
- * addq.w #4,sp *
- * 返り値 *
- * d0.l = ファイルサイズ *
- * < 0 の時はエラー *
- * a0.l = 読み込んだファイルのアドレス *
- * d0,a0 以外は保存 *
- * 備考 *
- * ファイル末尾に EOF ($1a) を追加します *
- *********************************************************
- .include DOSCALL.MAC
-
- .xdef load_text
-
- .text
- .even
- load_text:
- link a6,#0
- movem.l d5-d7,-(sp)
-
- clr.w -(sp) * 読み込み専用
- move.l 8(a6),-(sp) * ファイル名
- DOS _OPEN
- addq.w #6,sp
- tst.l d0
- bmi err_rts
- move.w d0,d7 * d7.w = ファイルハンドル
-
- move.w #2,-(sp) * ファイルの長さを調べる
- pea.l 0.w
- move.w d7,-(sp)
- DOS _SEEK
- addq.w #8,sp
- move.l d0,d6 * d6.l = ファイルサイズ
- beq err_rts * ファイルサイズが異常
-
- clr.w -(sp) * ファイルポインタを元に戻す
- pea 0.w
- move.w d7,-(sp)
- DOS _SEEK
- addq.w #8,sp
-
- addq.l #1,d6 * 末尾の EOF のぶん
- move.l d6,-(sp)
- DOS _MALLOC
- addq.w #4,sp
- move.l d0,d5 * d5.l = アドレス
- bmi err_rts
-
- move.l d6,-(sp) * ファイルサイズ
- move.l d5,-(sp) * アドレス
- move.w d7,-(sp) * ファイルハンドル
- DOS _READ
- lea.l 10(sp),sp
- tst.l d0
- bmi err_rts
-
- move.w d7,-(sp)
- DOS _CLOSE
- addq.w #2,sp
-
- movea.l d5,a0
- move.l d6,d0
- move.b #$1a,-1(a0,d0.l) * 末尾に EOF を加える
-
- load_text_rts:
- movem.l (sp)+,d5-d7
- unlk a6
- rts
-
- err_rts:
- moveq.l #-1,d0 * エラー終了
- bra load_text_rts
-